home *** CD-ROM | disk | FTP | other *** search
/ AOL File Library: 2,801 to 2,900 / aol-file-protocol-4400-2801-to-2900.zip / AOLDLs / C++ Files Library / HyperCuber Source / HyperCuber 2.0 Source.sit / HyperCuber 2.0 Source / CPrefs.cp < prev    next >
Text File  |  1993-08-22  |  5KB  |  195 lines

  1. //|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2. //| CPrefs.cp
  3. //|
  4. //| This implements a Preferences class.
  5. //|_________________________________________________________
  6.  
  7. #include "CPrefs.h"
  8.  
  9. #include <TBUtilities.h>
  10. #include <Folders.h>
  11. #include <Packages.h>
  12.  
  13.  
  14. //|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  15. //| CPrefs::IPrefs
  16. //|
  17. //| Purpose: Initialize the preferences and set them to their default
  18. //|          values.  Subclasses should override this to set the defaults.
  19. //|
  20. //| Parameters: the_filename: filename of the preferences file
  21. //|             prefs_size:   size of the Preferences structure
  22. //|             version:      the current preferences version
  23. //|_________________________________________________________________________
  24.  
  25. void CPrefs::IPrefs(Str255 the_filename, short prefs_size, short version)
  26. {
  27.  
  28.     CopyPString(the_filename, filename);        //  Save the filename
  29.     size = prefs_size;                            //  Save the size of the prefs struct
  30.     current_version = version;                    //  Save the current prefernces version
  31.  
  32. }    //==== CPrefs::IPrefs() ====\\
  33.     
  34.  
  35.  
  36. //|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  37. //| CPrefs::GetPrefsPointer
  38. //|
  39. //| Purpose: This returns a pointer to the preferences structure.  This is
  40. //|          used internally, so the Load and Save methods know where to
  41. //|          find the preferences.
  42. //|
  43. //| Parameters: returns pointer to prefs
  44. //|_________________________________________________________________________
  45.  
  46. short *CPrefs::GetPrefsPointer(void)
  47. {
  48.  
  49.     return NULL;        //  This should be overridden by subclasses
  50.  
  51. }    //==== CPrefs::GetPrefsPointer() ====\\
  52.     
  53.  
  54.  
  55. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  56. // CPrefs::Load
  57. //
  58. // Purpose: Load the preferences from the preferences file.
  59. //
  60. // Parameters: none
  61. //_________________________________________________________
  62.  
  63. void CPrefs::Load(void)
  64. {
  65.  
  66.     short        error;
  67.     FSSpec        prefs_file_spec;
  68.     short        prefs_file_refnum;
  69.     short        *temp_prefs;
  70.     
  71.     temp_prefs = (short *) NewPtr(size);                        //  Allocate temp prefs space
  72.  
  73.     error = FindFolder(kOnSystemDisk, kPreferencesFolderType,    //  Find the preferences file FSSpec
  74.                         kCreateFolder,
  75.                         &(prefs_file_spec.vRefNum),
  76.                         &(prefs_file_spec.parID));
  77.     CopyPString(filename, prefs_file_spec.name);
  78.  
  79.     error = FSpOpenDF(&prefs_file_spec, fsRdPerm,                //  Open the preferences file
  80.                         &prefs_file_refnum);
  81.     
  82.     /* If the file does not exist, create it */
  83.     if (error == fnfErr)
  84.         {
  85.         
  86.         Save();                                                    //  Write the default preferences
  87.                                                                 //  to the preferences file
  88.  
  89.         error = FSpOpenDF(&prefs_file_spec, fsRdPerm,            //  Open the preferences file
  90.                         &prefs_file_refnum);
  91.         
  92.         }
  93.  
  94.     SetFPos(prefs_file_refnum, 1, 0);                            //  Read the prefs from the file
  95.     long num_bytes = size;
  96.     FSRead(prefs_file_refnum, &num_bytes, temp_prefs);
  97.     
  98.     if (current_version != *temp_prefs)                            //  Check the prefs version
  99.         {
  100.  
  101.             //  This an older preferences version-- delete the file and build
  102.             //  a new one from defaults.
  103.         
  104.         error = FSClose (prefs_file_refnum);                    //  Get rid of the old prefs file
  105.         error = FSpDelete(&prefs_file_spec);
  106.         
  107.             //  Call LoadPrefs recursively-- this will create a new default prefs
  108.             //  file, since the old one has been deleted.
  109.         
  110.         Load();
  111.         return;
  112.         
  113.         }
  114.     
  115.     BlockMove(temp_prefs, GetPrefsPointer(), size);                //  Use the prefs from the file
  116.     
  117.     DisposPtr((char *) temp_prefs);                                //  Free temp prefs memory
  118.     
  119. }    //==== CPrefs::Load() ====\\
  120.  
  121.  
  122.  
  123. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  124. // CPrefs::Save
  125. //
  126. // Purpose: Write the current preferences to the preferences file.
  127. //
  128. // Parameters: none
  129. //_________________________________________________________________
  130.  
  131. void CPrefs::Save(void)
  132. {
  133.  
  134.     FSSpec    prefs_file_spec;
  135.     short    prefs_file_refnum;
  136.     short    error;
  137.  
  138.     error = FindFolder(kOnSystemDisk,                        //  Find the preferences file FSSpec
  139.                         kPreferencesFolderType,    
  140.                         kCreateFolder,
  141.                         &(prefs_file_spec.vRefNum),
  142.                         &(prefs_file_spec.parID));
  143.     CopyPString(filename, prefs_file_spec.name);
  144.  
  145.     error = FSpDelete(&prefs_file_spec);                    //  Create a new prefs file
  146.     error = FSpCreate(&prefs_file_spec, 'HCub',
  147.                         'Pref', iuSystemScript);
  148.     error = FSpOpenDF(&prefs_file_spec, fsWrPerm,            //  Open new file for writing
  149.                         &prefs_file_refnum);
  150.  
  151.     long num_bytes = size;                                    //  Write the current prefs to file
  152.     error = FSWrite(prefs_file_refnum, &num_bytes,
  153.                         GetPrefsPointer());
  154.     
  155.     error = FSClose(prefs_file_refnum);                        //  Close the prefs file
  156.     
  157. }    //==== CPrefs::Save() ====\\
  158.  
  159.  
  160.  
  161. //|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  162. //| CPrefs::Update
  163. //|
  164. //| Purpose: Update the preferences to match the settings being used.
  165. //|
  166. //| Parameters: none
  167. //|_____________________________________________________________________________
  168.  
  169. void CPrefs::Update(void)
  170. {
  171.  
  172.         //  This should be overridden by subclasses
  173.  
  174. }    //==== CPrefs::Update() ====\\
  175.  
  176.  
  177.  
  178. //|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  179. //| CPrefs::SetDefaults
  180. //|
  181. //| Purpose: Set the preferences to their default values.
  182. //|
  183. //| Parameters: none
  184. //|_____________________________________________________________________________
  185.  
  186. void CPrefs::SetDefaults(void)
  187. {
  188.  
  189.         //  This should be overridden by subclasses
  190.  
  191. }    //==== CPrefs::SetDefaults() ====\\
  192.  
  193.  
  194.  
  195.